Stata:如何保留时间连续的样本
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会课程 · 基于机器学习的因果推断方法
作者: 刘欣妍 (香港中文大学)
邮箱: liuxinyan@link.cuhk.edu.hk
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
目录
1. 问题引出
2. 方法 1:bysort 的运用
3. 方法 2:xtpattern 的应用
4. 方法 3:tsspell 的应用
5. 方法 4:regress 的应用
5.1 方法一
5.2 方法二
1. 问题引出
试想,我们拥有一份数据,但只想保留具有连续三年观测值的样本,这又该如何实现那?为此,我们将通过一个具体例子来予以说明。具体如下:
*-输入数据
clear
input id year price
1 2000 12
1 2001 23
1 2003 12
1 2004 13
1 2005 14
2 2000 44
2 2001 34
2 2002 67
3 2000 32
3 2004 55
3 2005 46
4 2000 34
4 2001 87
4 2002 78
4 2004 89
4 2005 99
5 2000 34
5 2002 77
5 2004 88
6 2001 14
6 2002 27
6 2003 38
end
xtset id year
save lianxh_xt_conti.dta, replace
*-样本分布
use lianxh_xt_conti.dta, clear
xtset id year
xtdes
样本分布特征:
Freq. Percent Cum. | Pattern
---------------------------+---------
1 16.67 16.67 | .111..
1 16.67 33.33 | 1...11
1 16.67 50.00 | 1.1.1.
1 16.67 66.67 | 11.111
1 16.67 83.33 | 111...
1 16.67 100.00 | 111.11
---------------------------+---------
6 100.00 | XXXXXX
可以看到,只有四个 id,即在 id = 1,id = 2,id = 4 和 id = 6 的情况下,才有连续三年观测值的样本。那么又如何将满足条件的样本筛选出来?接下来,我们将为大家介绍三种方法实现上述要求。
Note: 本文主要介绍如何将包含有连续三年的样本筛选出来,若仅要保留连续三年数据,只需调整部分参数。
2. 方法 1:bysort 的运用
关于 bysort
命令使用,其基本思想为,针对某个 id,当间隔年份差值为 2 时,判断为连续三年。具体代码如下:
*-bysort
use lianxh_xt_conti.dta, clear
gen ss = 0
by id (year), sort: replace ss = 1 if year - year[_n-2] == 2
by id (year), sort: egen ss_sum = sum(ss)
list in 1/11, sepby(id) noobs
keep if ss_sum > 0
xtdes
列出结果:
+---------------------------------+
| id year price ss ss_sum |
|---------------------------------|
| 1 2000 12 0 1 |
| 1 2001 23 0 1 |
| 1 2003 12 0 1 |
| 1 2004 13 0 1 |
| 1 2005 14 1 1 |
|---------------------------------|
| 2 2000 44 0 1 |
| 2 2001 34 0 1 |
| 2 2002 67 1 1 |
|---------------------------------|
| 3 2000 32 0 0 |
| 3 2004 55 0 0 |
| 3 2005 46 0 0 |
+---------------------------------+
Freq. Percent Cum. | Pattern
---------------------------+---------
1 25.00 25.00 | .111..
1 25.00 50.00 | 11.111
1 25.00 75.00 | 111...
1 25.00 100.00 | 111.11
---------------------------+---------
4 100.00 | XXXXXX
3. 方法 2:xtpattern 的应用
xtpattern
命令根据面板数据出现的时间创建字符串,我们可以依此筛选需要的样本。具体代码如下:
*-xtpattern
use lianxh_xt_conti.dta, clear
xtpattern, gen(pp)
gen ss = strpos(pp, "111")
list in 1/11, sepby(id) noobs
keep if ss > 0
xtdes
列出结果:
Freq. Percent Cum. | Pattern
---------------------------+---------
1 25.00 25.00 | .111..
1 25.00 50.00 | 11.111
1 25.00 75.00 | 111...
1 25.00 100.00 | 111.11
---------------------------+---------
4 100.00 | XXXXXX
xtpattern
命令注意事项:
xtpattern
对象为面板数据,所以在使用该命令前需xtset
;若当年有数据,取值为 1,反之为 .,字符串长度是根据样本中最长年份确定的。
4. 方法 3:tsspell 的应用
关于 tsspell
命令的应用。具体代码如下:
*-tsspell
use lianxh_xt_conti.dta, clear
xtset id year
tsspell, f(L.year == .)
by id: egen maxrun = max(_seq)
list in 1/11, sepby(id) noobs
keep if maxrun >= 3
xtdes
列出结果:
+---------------------------------------------------+
| id year price _spell _seq _end maxrun |
|---------------------------------------------------|
| 1 2000 12 1 1 0 3 |
| 1 2001 23 1 2 1 3 |
| 1 2003 12 2 1 0 3 |
| 1 2004 13 2 2 0 3 |
| 1 2005 14 2 3 1 3 |
|---------------------------------------------------|
| 2 2000 44 1 1 0 3 |
| 2 2001 34 1 2 0 3 |
| 2 2002 67 1 3 1 3 |
|---------------------------------------------------|
| 3 2000 32 1 1 1 2 |
| 3 2004 55 2 1 0 2 |
| 3 2005 46 2 2 1 2 |
+---------------------------------------------------+
Freq. Percent Cum. | Pattern
---------------------------+---------
1 25.00 25.00 | .111..
1 25.00 50.00 | 11.111
1 25.00 75.00 | 111...
1 25.00 100.00 | 111.11
---------------------------+---------
4 100.00 | XXXXXX
tsspell
命令注意事项:
在使用 tsspell
命令前,必须先将数据设置为面板数据;tsspell, f(L.year == .)
是找出连续年份,详情可参考help tsspell
;_seq 代表连续年份顺序; _end 代表是否是年份顺序最后一个; 最后,我们可通过找出 _seq 中最大值,找出连续三年的样本数据。
5. 方法 4:regress 的应用
5.1 方法一
*-regress 1
use "lianxh_xt_conti.dta", clear
xtset id year
reg id F(1/2).id
gen ss = e(sample)
bysort id: gen ss_sum = sum(ss)
bysort id: gen ss_sum2 = sum(ss_sum)
list in 1/11, sepby(id) noobs
keep if ss_sum2 >= 1 & ss_sum2 <= 3
xtdes
列出结果:
+-------------------------------------------+
| id year price ss ss_sum ss_sum2 |
|-------------------------------------------|
| 1 2000 12 0 0 0 |
| 1 2001 23 0 0 0 |
| 1 2003 12 1 1 1 |
| 1 2004 13 0 1 2 |
| 1 2005 14 0 1 3 |
|-------------------------------------------|
| 2 2000 44 1 1 1 |
| 2 2001 34 0 1 2 |
| 2 2002 67 0 1 3 |
|-------------------------------------------|
| 3 2000 32 0 0 0 |
| 3 2004 55 0 0 0 |
| 3 2005 46 0 0 0 |
+-------------------------------------------+
Freq. Percent Cum. | Pattern
---------------------------+---------
2 50.00 50.00 | 111...
1 25.00 75.00 | ...111
1 25.00 100.00 | .111..
---------------------------+---------
4 100.00 | XXXXXX
5.2 方法二
use "lianxh_xt_conti.dta", clear
xtset id year
qui reg id F(1/2).id
gen s1 = e(sample)
list, sepby(id)
qui reg id L(1).id F1.id
gen s2 = e(sample)
list, sepby(id)
qui reg id L(1/2).id
gen s3 = e(sample)
list, sepby(id)
gen ss = s1+s2+s3
list in 1/11, sepby(id) noobs
by id: egen ss_sum = sum(ss)
keep if ss_sum == 3
xtdes
+---------------------------------------+
| id year price s1 s2 s3 ss |
|---------------------------------------|
| 1 2000 12 0 0 0 0 |
| 1 2001 23 0 0 0 0 |
| 1 2003 12 1 0 0 1 |
| 1 2004 13 0 1 0 1 |
| 1 2005 14 0 0 1 1 |
|---------------------------------------|
| 2 2000 44 1 0 0 1 |
| 2 2001 34 0 1 0 1 |
| 2 2002 67 0 0 1 1 |
|---------------------------------------|
| 3 2000 32 0 0 0 0 |
| 3 2004 55 0 0 0 0 |
| 3 2005 46 0 0 0 0 |
+---------------------------------------+
Freq. Percent Cum. | Pattern
---------------------------+---------
1 25.00 25.00 | .111..
1 25.00 50.00 | 11.111
1 25.00 75.00 | 111...
1 25.00 100.00 | 111.11
---------------------------+---------
4 100.00 | XXXXXX
课程推荐:因果推断实用计量方法
主讲老师:邱嘉平教授
🍓 课程主页:https://gitee.com/lianxh/YGqjp
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。